package com.jt;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
/**@EnableFeignClients 注解用于描述配置类,告诉系统底层,在服务启动时
 * 扫描使用@FeignClient注解描述的接口,并为这些接口创建实现类对象(代理对象)
 * .然后在这样的对象内部,可以进行远程服务调用*/
@EnableFeignClients
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class,args);
    }
    /**
     * 我们通过此对象进行远程服务调用,也就是说去调用其他服务
     * 此对象对基于HTTP协议进行服务调用的过程进行封装,提供
     * 了一些模范方法(get,post,put,delete,....),专门用于
     * 调用网络另一端的服务
     * */
@Bean
    public RestTemplate restTemplate(){

        return new RestTemplate();
    }
    /**loadBalanced 注解描述RestTemplate对象时2,是告诉底层
     * restTemplate 对象注入一个负载均衡拦截器,当我们使用RestTemplate
     * */
    @Bean
    @LoadBalanced
    public RestTemplate LoadBalancedRestTemplate(){

        return new RestTemplate();
    }
    @Bean
    public IRule ribbonRule(){
        return new RandomRule();
    }
}

